package jdbc;

import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

//MySQL "增" 操作
public class Demo1 {
    public static void main(String[] args) throws SQLException  {

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入姓名: ");
        String name = sc.next();
        System.out.println("请输入年龄: ");
        int age = sc.nextInt();

        // 1. 创建 "数据源"
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java118?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("753456");

        // 2. 和数据库服务器建立连接
        Connection connection = dataSource.getConnection();

        // 3. 构造 SQL
        String sql = "insert into student values (?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,age);

        // 4. 执行 SQL, 和服务器通信
        //    这里的 n 表示当前这个操作, 影响到多少行~~
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

        // 5. 代码中要释放上述的资源. 释放顺序和创建顺序相反.
        statement.close();
        connection.close();
    }
    public static void main1(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);

        // 1. 创建 "数据源"
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java118?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("2222");

        // 2. 和数据库服务器建立连接
        Connection connection = dataSource.getConnection();

        // 3. mysql 认识 SQL 语句!! 要想 java 操作数据库, 本质上让 java 代码构造出一个 sql 语句字符串
        //    发给数据库服务器!!
        //    字符串的 SQL 不符合 JDBC 的要求. JDBC 需要通过 SQL 字符串构造出 "语句" 对象
        System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        System.out.println("请输入姓名: ");
        String name = scanner.next();

        // String sql = "insert into student values(" + id + ", '" + name + "')";
        String sql = "insert into student values(?, ?)";
        // Statement statement = connection.createStatement(sql);
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);

        // 4. 把语句发送给服务器去执行了.
        //    这里的 n 表示当前这个操作, 影响到多少行~~
        int n = statement.executeUpdate();
        // statement.executeQuery();
        System.out.println("n = " + n);

        // 5. 代码中要释放上述的资源. 释放顺序和创建顺序相反.
        statement.close();
        connection.close();
    }
}

